package cn.lg.soar.boot.nc.service.impl;

import cn.lg.soar.boot.nc.entity.vo.LinkUsVo;
import cn.lg.soar.common.model.HttpResult;
import cn.lg.soar.common.model.IPageQuery;
import cn.lg.soar.common.model.PageQuery;
import cn.lg.soar.common.model.PageResult;
import cn.lg.soar.common.util.ParameterUtil;
import cn.lg.soar.database.query.QueryParams;
import cn.lg.soar.database.query.SqueryWapper;
import cn.lg.soar.database.util.PageUtils;
import cn.lg.soar.system.api.service.IUserApi;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import cn.lg.soar.database.base.service.impl.BaseServiceImpl;
import cn.lg.soar.boot.nc.mapper.LinkUsMapper;
import cn.lg.soar.boot.nc.entity.LinkUs;
import cn.lg.soar.boot.nc.service.LinkUsService;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * 联系我们管理
 * @author ZhuanZ（无密码）
 * @since 2025-02-17
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
@Service
public class LinkUsServiceImpl extends BaseServiceImpl<LinkUsMapper, LinkUs> implements LinkUsService {

    @Autowired
    IUserApi iUserApi;

    private SqueryWapper<LinkUs> linkUsSqueryWapper;

    @Override
    public HttpResult<Serializable> updateSort(List<Map<String, Integer>> sortedData) {
        if (null == sortedData || 0 >= sortedData.size()) {
            return HttpResult.fail("4000", "排序数据不可为空", "error");
        }

        sortedData.forEach(item-> {

            if (!item.containsKey("id") || !item.containsKey("orders")) {
                return;
            }

            Long id = item.get("id").longValue();
            int orders = item.get("orders");

            LinkUs linkUs = new LinkUs();
            linkUs.setId(id);
            linkUs.setOrders(orders);
            this.updateById(linkUs);
        });

        return HttpResult.success("排序成功");
    }

    @Override
    public HttpResult<PageResult<LinkUsVo>> getLinkUsVo(PageQuery pageQuery, QueryParams params) {
        params.setFields(new ArrayList<>());//查询字段置为空，默认查询所有
        PageResult<LinkUsVo> resultVo = new PageResult<>();

        if (linkUsSqueryWapper==null) {
            linkUsSqueryWapper = new SqueryWapper<>(LinkUs.class);
        }

        QueryWrapper<LinkUs> linkUsQueryWrapper = Wrappers.query();
        if (pageQuery==null || pageQuery.getPageSize()<=0) {
            linkUsSqueryWapper.setWhere(params.getF(), linkUsQueryWrapper);
            linkUsSqueryWapper.setSelect(params.getFields(), linkUsQueryWrapper);
            linkUsSqueryWapper.setOrderBy(params.getOrderBy(), linkUsQueryWrapper);
            //所有数据
            List<LinkUs> list = super.list(linkUsQueryWrapper);
            //存储数据
            List<LinkUsVo> voList = new ArrayList<>();

            for (LinkUs linkUs : list) {
                LinkUsVo vo = new LinkUsVo();
                BeanUtils.copyProperties(linkUs, vo);
                //获取用户,并塞入模板
                vo.setUpdateBy(iUserApi.getById(linkUs.getUpdateBy()).getNickname());
                voList.add(vo);
            }
            //塞入模型数据
            resultVo.setList(voList);
            return  HttpResult.data(resultVo);
        }
        resultVo.setPageNo(pageQuery.getPageNo());
        resultVo.setPageSize(pageQuery.getPageSize());
        resultVo.setQueryType(pageQuery.getQueryType());

        if (IPageQuery.QueryType.total.equals(pageQuery.getQueryType())) {
            linkUsSqueryWapper.setWhere(params.getF(), linkUsQueryWrapper);
            resultVo.setTotal(super.count(linkUsQueryWrapper));
        }
        IPage<LinkUs> page = PageUtils.toPage(pageQuery);
        linkUsSqueryWapper.setWhere(params.getF(), linkUsQueryWrapper);
        linkUsSqueryWapper.setSelect(params.getFields(), linkUsQueryWrapper);
        linkUsSqueryWapper.setOrderBy(params.getOrderBy(), linkUsQueryWrapper);

        page = super.page(page, linkUsQueryWrapper);
        resultVo.setTotal(page.getTotal());
        //存储数据
        List<LinkUsVo> voList = new ArrayList<>();
        List<LinkUs> records = page.getRecords();
        for (LinkUs record : records) {
            LinkUsVo vo = new LinkUsVo();
            BeanUtils.copyProperties(record, vo);
            //获取用户,并塞入模板
            vo.setUpdateBy(iUserApi.getById(record.getUpdateBy()).getNickname());
            voList.add(vo);
        }
        //塞入模型数据
        resultVo.setList(voList);

        return HttpResult.data(resultVo);
    }

    @Override
    public HttpResult<LinkUsVo> getById(Long id) {
        ParameterUtil.notNull(id, "缺少数据id");
        //返回数据模板
        LinkUsVo vo = new LinkUsVo();
        //所有数据
        LinkUs linkUs = super.getById(id);
        //复制数据
        BeanUtils.copyProperties(linkUs, vo);
        vo.setUpdateBy(iUserApi.getById(linkUs.getUpdateBy()).getNickname());

        return HttpResult.data(vo);
    }
}
